之前忘了做一件事了,
今天補回來,
就是java檔案的講解,
雖然Android已經幫我們建好了,
而且基本上什麼功能都沒有,
不過為了之後繼續深入,
還是要了解一下程式的流程,
以下先貼出目前完整的後端內容,
package com.example.user.mybmi;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.LocaleList;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Resources res = getResources();
Configuration conf = res.getConfiguration();
Locale.setDefault(Locale.SIMPLIFIED_CHINESE);
createConfigurationContext(conf);
setContentView(R.layout.activity_main);
}
}
現在開始逐項講解
package com.example.user.mybmi;
這一行的作用是指出這個檔案所在的命名空間,package(套件)是關鍵字,
如果我們寫了一個java檔案,
其他的檔案要引用到他的class或class內的方法,
就需要
import com.example.user.mybmi;
import其實就是引用的意思,
每個程式語言寫法有點不一樣,
像C++是include,
C#是using,
(C++也有using)
VB是Imports,
PHP有include跟require,
其實都是大同小異...
其中最重要的套件就是
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
程式中預設導入這兩個套件,幾乎所有的Android應用程式都會用到這兩個套件, Android平臺支援的package主要因為手機系統特性與程式碼授權的考量,與標準版的Java支援的package不盡相同。在設計Android應用程式時,常常需要參考可用的API列表,完整的API可以查閱官方支援的package列表
https://developer.android.com/reference/packages
public class MainActivity extends AppCompatActivity
MainActivity是這個類別的名稱,extends表示MainActivity這個類別的功能、型別等全繼承自AppCompatActivity類別。
整句話的意思是 宣告一個公開的MainActivity類別。這個MainActivity類別繼承了程式開頭導入的AppCompatActivity類別。
早期都是繼承自Activity,AppCompatActivity似乎是優化了一些UI及效率,這部分沒有深入研究
protected void onCreate(Bundle savedInstanceState)
onCreate是這個方法的名稱,void表示不需任何回傳值,這個方法導入了一個名為savedInstanceState(儲存實體狀態)的Bundle型別參數,Bundle型別正是我們前面所導入的package之一,Bundle的內容與Android手機平臺的記憶體管理有關。
Bundle類別可以保存Activity上一次關閉(stop)時的狀態,我們可以透過覆載onStop方法來保存關閉前的狀態,當程式啟動時,會再次呼叫onCreate方法,就能從savedInstanceState中得到前一次凍結的狀態。
我們也可以透過Bundle來將這個Activity的內容傳到下一個Activity中。
super.onCreate(savedInstanceState);
super是關鍵字,代表這個MainActivity類別的上層類別AppCompatActivity,意思是執行AppCompatActivity類別中onCreate方法的內容,一個Android應用程式,會對應到一個以上的Activity,onCreate方法是每個Activity類別初始化時都會去呼叫的方法。我們想做的是保持原本onCreate方法預設的動作,然後在其中加入我們想要的內容。
因為我們已經覆載(@Override)了MainActivity類別的onCreate方法,因此如果我們想將原本的onCreate方法內容保留,再加上我們自己的內容,就要使用super語句,並傳入savedInstanceState參數。如此就會先執行AppCompatActivity類別的onCreate方法,再執行我們覆載的onCreate方法裡面的其他程式內容。
setContentView(R.layout.activity_main);
螢幕顯示的畫面,是透過各種介面元件的排列配置結構來描述的。要將一套版面配置的層次結構轉換到一個螢幕上時,Activity會呼叫它用來設定螢幕顯示內容的setContentView方法,並傳入定義了版面配置的Xml描述檔。當Activity被啟動並需要顯示到螢幕上時,系統會通知Activity並根據引用的Xml檔來描繪出使用者介面。
感謝樓主!我寫了一個月也沒認真研究這些程式是幹嘛的。
如果真的要寫API還是需要去了解,
我寫的這些還算是比較基本的部分,
太深的東西其實我也不熟,
畢竟不是以寫手機為主.
不好意思,我想問點問題...
比較大大跟我的程式碼之後發現我的import裡面少了好多東西
我的import只有
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
這樣兩行而已,為什麼會少那麼多呢???
會不會對後續處理有麼影響呢?
謝謝大大~
以下是完整的程式碼
package com.example.a123;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
基本上只要執行正常就OK了.
我已經兩年沒摸Android了,
有些東西好像已經變了,
而且我以為現在大家都學Kotlin了.
了解!
後來有點怕執行問題就加上大大給的其他IMPORT了www
我算是略懂java,對kotlin不熟,所以用java去寫~